package DAO;

import java.util.List;
import metier.Personne;

public class DAOPersonneJPA extends DAOJPA implements DAOPersonne{

	private static DAOPersonneJPA instance=null;
	
	private DAOPersonneJPA() {}
	
	public static DAOPersonneJPA getInstance() {
		if(instance == null)
			instance = new DAOPersonneJPA();
		return instance;
	}

	
	@Override
	public Personne get(int id) {
		Personne personne = DAOJPA.getManager().find(Personne.class, id);
		return personne;
	}

	@Override
	public void save(Personne personne) {
		if(personne.getId() != -1)
			throw new IllegalArgumentException("personne d�ja enregistr��e");
		
		DAOJPA.getManager().persist(personne);
		DAOJPA.commit();
		
	}
	
	@Override
	public void update(Personne personne) {
		if(personne.getId() == -1)
			throw new IllegalArgumentException("la personne n'existe pas dans la bdd");	
		DAOJPA.getManager().createNativeQuery("UPDATE Personne SET nom_pers="+personne.getNom()+",prenom_pers="+personne.getPrenom()+", dateNaissance_pers="+personne.getDateNaissance()+", image_pers="+personne.getImage()+" WHERE id_pers="+personne.getId()+"",Personne.class);	
		DAOJPA.commit();
	}

	@Override
	public void remove(Personne personne) {
		if(personne.getId() == -1)
			throw new IllegalArgumentException("personne d�ja supprim�e");

		DAOJPA.getManager().remove(personne);
		DAOJPA.commit();
		personne.setId(-1);
		
	}
	
	@Override
	public int getNombrePersonnes() {
		List<Personne> liste = loadAll();

		System.out.println("NB--PERS  :: "+liste.size());
		return liste.size();
	}


	@SuppressWarnings("unchecked")
	@Override
	public List<Personne> loadAll() {
		return  DAOJPA.getManager().createNativeQuery("SELECT * FROM personne",Personne.class).getResultList();
	}

	
	@SuppressWarnings("unchecked")
	@Override
	public List<Personne> loadAllWithName(String name) {
		return  DAOJPA.getManager().createNativeQuery("SELECT * FROM personne p WHERE p.nom_pers LIKE '%"+name+"%' OR p.prenom_pers LIKE '%"+name+"%'",Personne.class).getResultList();
	}

	
	@SuppressWarnings("unchecked")
	@Override
	public List<Personne> loadAll_acteur() {
		return  DAOJPA.getManager().createNativeQuery("SELECT * FROM personne WHERE id_pers IN (SELECT id_personne FROM joue)",Personne.class).getResultList();
	}
	

	@SuppressWarnings("unchecked")
	@Override
	public List<Personne> loadAll_realisateur() {
		return  DAOJPA.getManager().createNativeQuery("SELECT * FROM personne WHERE id_pers IN (SELECT id_personne FROM realise)",Personne.class).getResultList();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Personne> loadAll_producteur() {
		return  DAOJPA.getManager().createNativeQuery("SELECT * FROM personne WHERE id_pers IN (SELECT id_personne FROM produit)",Personne.class).getResultList();
	}
	
}
